<?php
/* 
 * ********* CVS HEADER ********* 
 * 
 * $RCSfile: environnement.php,v $ 
 * $Date: 2007/07/30 21:15:27 $ 
 * $Revision: 1.3 $ 
 * 
 * ********* CVS HEADER ********* 
 */
/* Cree un nouvel environnement */
function creer_environnement($P_nom, $P_description, $P_accueil) {
	global $rportalconstants;
	
    $L_base_env = get_env_path();
	$L_base_theme = $rportalconstants->get_value("PATH", "environnement.path.public");
    
    $query = "SELECT `nom` FROM `environnement` WHERE nom='".$P_nom."'";
    $L_result = @rportalrequete($query) or rportalerreur($query,"?op=admenvliste");
    if (rportalnbresult($L_result) != 0) {
    	rportalerreur("Le nom d'environnement '".$P_nom."' est d&eacute;j&agrave; utilis&eacute;.","?op=admenvliste");
    }
    
    require_once(get_path_module("environnement.environnement"));
    $env = new environnement;
    $env->setnom($nom);
    $query ="INSERT INTO environnement (nom,description,accueil,lastmod,modification)";
	$query.=" VALUES ('$P_nom','$P_description','$P_accueil',NOW(),'Creation de l\'environnement');";
	$res = @rportalrequete($query) or rportalerreur($query,"?op=admenvliste");
	$env->setid(rportallastid($res));
	$query ="UPDATE environnement SET environnement='".$env->serialize()."'";
	$query.=" WHERE id='".$env->getid()."'";
	@rportalrequete($query) or rportalerreur($query,"?op=admenvliste");
	if(!is_dir($L_base_env.$P_nom))   mkdir($L_base_env.$P_nom);
	if(!is_dir($L_base_theme.$P_nom))   mkdir($L_base_theme.$P_nom);
	return $env->getid();
}

/* Charger un environnement via un fichier */
function charger_environnement($P_fichier, $P_envid, $P_nom, $P_modification) {
	$fp = fopen($P_fichier, "r");
	if ($fp==false) {
		rportalerreur("Erreur d'ouverture du fichier de sauvegarde : ".$P_fichier,"?op=admenvmod&argid=".$P_envid);
	}
	$sauvegarde = fread($fp, filesize($P_fichier));
	fclose($fp);
	$pattern1 = "|<rportal::objet>(.*)<\/rportal::objet>|misU";
    $count = preg_match_all($pattern1, $sauvegarde,$sortie,PREG_PATTERN_ORDER);
    if($count!=1){
    	rportalerreur("Le fichier de sauvegarde est mal formate : objet non defini.[$count]<br />".$sauvegarde,"?op=admenvmod&argid=".$P_envid);
    }
    /**
      * $sortie[0][$i] : avec <rportal::objet>
      * $sortie[1][$i] : sans <rportal::objet>
      */
    require_once(get_path_module("environnement.environnement"));
    require_once(get_path("param")."environnement.php");
    $L_env=restaure_environnement(stripslashes($sortie[1][0]));
    if ($L_env === false) {
    	$L_message  = "Mauvais format du fichier de sauvegarde.";
    	$L_message .= "<br />V&eacute;rifiez vos options de d&eacute;compression.";
    	rportalerreur($L_message,"?op=admenvmod&argid=".$P_envid);
    }
    for($i=0; $i < $L_env->getnbbox(); $i++){
    	$box = $L_env->getbox($i);
    	$query="SELECT id FROM rportal_boxtype WHERE nom='".$box->gettypenom()."'";
    	$result=rportalrequete($query) or rportalerreur("le fichier n'est pas defini","?op=");
		if(rportalnbresult($result)==0){
		    rportalerreur("Vous devez installer le type de box : ".$box->gettypenom(),"?op=");
		}
		$row = rportalligne($result);
		$box->settype($row['id']);
		$L_env->setbox($i,$box);
    }
    $L_env->setid($P_envid);
    $L_env->setnom($P_nom);
    $pattern1 = "|<rportal::tplprinc>(.*)<\/rportal::tplprinc>|misU";
    $count = preg_match_all($pattern1, $sauvegarde,$sortie,PREG_PATTERN_ORDER);
    if($count!=1){
    	rportalerreur("Le fichier de sauvegarde est mal defini: tplprinc non defini","Location: ?op=admenvmod&argid=".$P_envid);
	}
    $fichier=$L_env->getfichier();
    $fp = fopen($fichier, "w");
    fwrite($fp, $sortie[1][0]);
    fclose($fp);
    $fp = fopen($fichier.'.pur', "w");
    fwrite($fp, $L_env->killtplfromstring($sortie[1][0]));
    fclose($fp);
    
    $pattern1 = "|<rportal::tplsecond[^>]*>(.*)<\/rportal::tplsecond>|misU";
    $count = preg_match_all($pattern1, $sauvegarde,$sortie,PREG_PATTERN_ORDER);
    for($i=0;$i<$count;$i++){
    	$pattern_file="/<rportal::tplsecond [^>]*file=[\"|'](.*)[\"|'].*>/misU";
        preg_match($pattern_file,$sortie[0][$i],$file);
        $fp = fopen($L_env->base_path.$file[1], "w");
	    fwrite($fp, $sortie[1][$i]);
	    fclose($fp);
    }
    $modif = $P_modification;
    $modif = "Chargement de l'environnement.\n" . $modif;
    $query="UPDATE environnement SET environnement='".$L_env->serialize()."' ,lastmod=NOW(),modification='".addslashes($modif)."' WHERE id='$P_envid'";
    @rportalrequete($query) or rportalerreur($query,"?op=admenvmod&argid=$P_envid");
}

/* Genere un environnement */
function generer_environnement($P_envid) {
	/**
	  * On recupere les donnees de l'environnement
	  */
	$query="SELECT environnement FROM environnement WHERE id='$P_envid'";
	$result=rportalrequete($query) or rportalerreur($query,"?op=admenvmod&argid=$P_envid");
	if($environnement=rportalligne($result)){
		require_once(get_path_module("environnement.environnement"));
		require_once(get_path("param")."environnement.php");
	    $env=restaure_environnement($environnement['environnement']);
		$env->construct();
		$env->writefile();
		$query ="UPDATE environnement SET lastgen=NOW(),modification=''";
		$query.=" WHERE id='".$P_envid."'";
		@rportalrequete($query) or rportalerreur($query,"?op=admenvmod&argid=$P_envid");
	}
}
?>